package com.copd.mapper;

import com.copd.entity.BackupData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface BackupDataMapper {
    /**
     * 查询患者基本信息备份数据
     * @param patientId 患者ID
     * @param offset 分页偏移量
     * @param pageSize 每页数量
     * @return 备份数据列表
     */
    List<Map<String, Object>> selectPatientInfoBackups(
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime,
        @Param("offset") int offset,
        @Param("pageSize") int pageSize
    );
    
    /**
     * 查询诊断记录备份数据
     * @param patientId 患者ID
     * @param offset 分页偏移量
     * @param pageSize 每页数量
     * @return 备份数据列表
     */
    List<Map<String, Object>> selectDiagnosisRecordsBackups(
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime,
        @Param("offset") int offset,
        @Param("pageSize") int pageSize
    );
    
    /**
     * 查询检查项目备份数据
     * @param patientId 患者ID
     * @param offset 分页偏移量
     * @param pageSize 每页数量
     * @return 备份数据列表
     */
    List<Map<String, Object>> selectExaminationItemsBackups(
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime,
        @Param("offset") int offset,
        @Param("pageSize") int pageSize
    );
    
    /**
     * 查询治疗计划备份数据
     * @param patientId 患者ID
     * @param offset 分页偏移量
     * @param pageSize 每页数量
     * @return 备份数据列表
     */
    List<Map<String, Object>> selectTreatmentPlansBackups(
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime,
        @Param("offset") int offset,
        @Param("pageSize") int pageSize
    );
    
    /**
     * 查询出院建议备份数据
     * @param patientId 患者ID
     * @param offset 分页偏移量
     * @param pageSize 每页数量
     * @return 备份数据列表
     */
    List<Map<String, Object>> selectDischargeRecordsBackups(
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime,
        @Param("offset") int offset,
        @Param("pageSize") int pageSize
    );
    
    /**
     * 获取各类备份数据的总数
     * @param tableName 表名（patient_info_backup, diagnosis_records_backup等）
     * @param patientId 患者ID
     * @return 记录总数
     */
    long countBackupData(
        @Param("tableName") String tableName,
        @Param("patientId") Integer patientId,
        @Param("operationType") String operationType,
        @Param("startTime") String startTime,
        @Param("endTime") String endTime
    );
} 